#include "process.h"
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

/**
 * shell，fork和exec函数族使用例子
 * date:2025-08-29 11:12
 */
void sh() {
    char command[64];
    memset(command, 0, sizeof(command));

    pid_t pid;
    while (1) {
        printf("zefre~ ");
        scanf("%s", command);
        if (strcmp("exit", command) == 0)
            exit(0);
        if ((pid = fork()) == 0) {
            // 子进程
            puts("子进程开始运行");
            int exec_ret = execlp(command, "", NULL);
            if (exec_ret == -1) {
                printf("执行命令[%s]出错\n", command);
                exit(-1);
            }
        } else {
            // 父进程
            printf("父进程创建子进程完毕，子进程pid=%d\n", pid);
            // 重置父进程自己的command变量
            memset(command, 0, sizeof(command));
            // 等待子进程返回
            waitpid(pid, NULL, 0);
        }
    }
}

